/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.groupa.project1.chat;

import com.groupa.project1.chat.interfaces.Tools;
import com.groupa.project1.database.interfaces.XmlDbDataSource;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.*;
import java.util.Iterator;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
 *
 * @author groupA
 */
public class ToolsClass implements Tools{
  
        Logger log;
        private static ToolsClass Tools;
        
        public ToolsClass(Logger log) {
            this.log = log;           
        }

        public byte[] toByteArray(File file){

          
            ByteArrayOutputStream bos = null;
            FileInputStream fis;
            byte[] buf;
            byte[] bytes = null;

            if(file.exists()){

                try {

                fis = new FileInputStream(file);    
                bos = new ByteArrayOutputStream();
                buf = new byte[1024];

                    for (int readNum; (readNum = fis.read(buf)) != -1;) {
                        bos.write(buf, 0, readNum); 
                    }
                } catch (IOException ex) {
                    log.info("Ërror al pasar a array de bytes");
                }
                bytes = bos.toByteArray();


            }else{

                log.info("No se encuentra el archivo");

            }

            return bytes;
        }

         public File toPhoto(String path, byte[] bytes){

            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
            Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
            ImageReader reader = (ImageReader) readers.next();
            Object source = bis; 
            ImageInputStream iis;
            File imageFile = null;
            try {
                iis = ImageIO.createImageInputStream(source);
                reader.setInput(iis, true);
                ImageReadParam param = reader.getDefaultReadParam();    
                Image image = reader.read(0, param);
                BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
                Graphics2D g2 = bufferedImage.createGraphics();
                g2.drawImage(image, null, null);
                imageFile = new File(path);
                ImageIO.write(bufferedImage, "jpg", imageFile);    

            } catch (IOException ex) {
                Logger.getLogger(ListenerClass.class.getName()).log(Level.SEVERE, null, ex);
            }

            return imageFile;

        }


        public void createThumbnail(String imgFilePath,String thumbPath,int thumbWidth,int thumbHeight)throws Exception{

            Image image = Toolkit.getDefaultToolkit().getImage(imgFilePath);

            MediaTracker mediaTracker = new MediaTracker(new Container());
            mediaTracker.addImage(image, 0);
            mediaTracker.waitForID(0);

            double thumbRatio = (double)thumbWidth / (double)thumbHeight;
            int imageWidth = image.getWidth(null);
            int imageHeight = image.getHeight(null);

            double imageRatio = (double)imageWidth / (double)imageHeight;

            if (thumbRatio < imageRatio) {
                thumbHeight = (int)(thumbWidth / imageRatio);
            } else {
                thumbWidth = (int)(thumbHeight * imageRatio);
            }

            BufferedImage thumbImage = new BufferedImage(thumbWidth,
            thumbHeight, BufferedImage.TYPE_INT_RGB);

            Graphics2D graphics2D = thumbImage.createGraphics();
            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,

            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);

            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(thumbPath));
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

            JPEGEncodeParam param = encoder.
            getDefaultJPEGEncodeParam(thumbImage);

            int quality = 100;

            param.setQuality((float)quality / 100.0f, false);
            encoder.setJPEGEncodeParam(param);

            encoder.encode(thumbImage);
            out.close(); 
            }
}